用Tailscale将使用Django开发的WebApp公开的方法

我想要使用Tailscale在Django上发布WebApp!

当使用Django发布应用时,通常会使用AWS或Heroku等云服务,这些服务通常是收费的。虽然个人可能有可用作服务器的设备,但感觉为此支付费用有些浪费。针对这种情况,可以考虑使用tailscale!

这次的构成

试试使用Nginx、PostgreSQL、Django和Docker来发布网站。

(Shì shì Nginx, PostgreSQL, Django hé Docker .)

创建Docker环境

1.png

准备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。

最后

我个人在做事情的过程中,尝试了很多,但可能会有很多地方不完整,如果有什么问题,请在评论中告诉我。
另外,如果我发现了缺漏的部分,我会追加在后面,请多多关注。

广告
将在 10 秒后关闭
bannerAds