用Tailscale将使用Django开发的WebApp公开的方法
我想要使用Tailscale在Django上发布WebApp!
当使用Django发布应用时,通常会使用AWS或Heroku等云服务,这些服务通常是收费的。虽然个人可能有可用作服务器的设备,但感觉为此支付费用有些浪费。针对这种情况,可以考虑使用tailscale!
这次的构成
试试使用Nginx、PostgreSQL、Django和Docker来发布网站。
(Shì shì Nginx, PostgreSQL, Django hé Docker .)
创建Docker环境

准备Nginx,Postgre和Django的环境。
Dockerfile – Docker文件
FROM python:3.11
ENV PYTHONUNBUFFERED 1
RUN mkdir ./code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml的翻译可以是:
docker-compose配置文件
version: '3'
services:
db:
restart: always
image: postgres
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=postgres
volumes:
- ./db:/var/lib/postgresql/data
container_name: postgres
web:
restart: always
build: .
command: bash -c "python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
container_name: django
nginx:
restart: always
build: ./nginx
ports:
- 80:80
depends_on:
- web
container_name: nginx
volumes:
db-data:
使用Docker进行环境搭建
Nginx的配置
./nginx/Dockerfile 文件的翻译如下:
FROM nginx:latest
# デフォルトのconfを消して、別の設定を追加
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
./nginx/nginx.conf 的中文翻译:存取`nginx/nginx.conf`文件的路径。
upstream django {
# コンテナのサービス名を指定し、名前解決
server web:8000;
}
server {
# 80ポートで待ち受け
listen 80;
client_max_body_size 64m;
location / {
proxy_pass http://django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
# gzip圧縮
gzip on;
gzip_min_length 1k;
gzip_types text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml;
gzip_disable "msie6";
}
}
./nginx/uwsgi_params 可以被用于设置Nginx和uWSGI之间的参数。
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
Django的配置
./mysite/settings.py 的中文本地化翻译如下:
“./mysite/settings.py”
DEBUG = False
ALLOWED_HOSTS = ["*"] #自分の公開予定のDNSへ変更
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": "postgres",
"USER": "postgres",
"PASSWORD": "postgres",
"HOST": "db",
"PORT": 5432,
}
}
您可以使用上述设置。
将Tailscale安装到终端设备上。
创建Tailscale账户。
点击先前的链接,然后选择”免费试用”按键进行注册。
点击此处以下载到各个设备!
容器的启动
docker-compose up -d
开启。
进入网页容器,然后在里面。
python3 manage.py migrate
这次我们将在树莓派(Linux终端)上进行安装。
curl -fsSL https://tailscale.com/install.sh | sh
执行上述命令可安装tailscale。
tailscale up
执行此操作后,会出现登录画面。然后登录进入。然后此处将显示终端。
通过使用漏斗,可以将其公开给VPN外的人
要使用漏斗,需要经过几个步骤。
1. 启用MagicDNS
2. 启用HTTPS证书
3. 创建密钥
4. 设置端口转发
5. 打开Funnel
6. 使用外部访问Tailscale节点的IP
1.2. 启用MagicDNS和HTTPS证书。
首先,在这里进行DNS和HTTPS的设置。启用MagicDNS和HTTPS证书。
创建密钥.
随后,在Raspberry Pi上
例
sudo tailscale cert raspberrypi.・・・・.ts.net
通过执行此操作,可以实现对HTTPS的支持。
4. 端口转发
在Tailscale上,有大约三个可用的端口,我会将流量转发到其中一个端口。
进行端口转发。
在这种情况下,我会将Nginx服务器上的端口80转发到Tailscale的443端口。
根据要公开的路径,您可能需要修改路径的位置。
sudo tailscale serve https:443 / http://127.0.0.1:80
另外,
tailscale funnel port(数字) on
所以,还可以进行端口指定。
5. 启用漏斗
目前为止,所有设定已经全部改变完成了。
sudo tailscale funnel on
通过进行某项活动,可以激活漏斗。
6. 尝试外部访问
我认为可以使用以下方式访问:https://Tailscale节点的IP地址或https://注册端末名.tail,.ts.net。
最后
我个人在做事情的过程中,尝试了很多,但可能会有很多地方不完整,如果有什么问题,请在评论中告诉我。
另外,如果我发现了缺漏的部分,我会追加在后面,请多多关注。