我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker手动构建 nginx+py3

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker手动构建 nginx+py3

这里使用的阿里云服务器部署,云服务器ssh登陆成功后,如果几分钟没有操作的话,sshd会自动断开登陆,对于我们来说,在部署软件有时要等很久,经常会发生ssh断开的情况,又或是上个侧所回来ssh就断开了,非常头痛。

这里我们要先解决ssh断开连接的问题

# egrep ^Client /etc/ssh/sshd_config
ClientAliveInterval 15 --间隔多少秒发送一次心跳
ClientAliveCountMax 1800 --多少秒没有数据产生时断开连接

部署py3+uwsgi+nginx用于运行py3应用程序

  1. CentOS 7 安装Docker
    # yum -y install docker
    # echo 1 > /proc/sys/net/ipv4/ip_forward   --打开路由转发,用于给容器上外网
    # systemctl restart network

2、配置阿里Docker镜像源
如果直接使用DockerHub官方仓库上传下载镜像的话,网速不快,因为跨国了,这里使用国内的阿里Docker镜像源:
https://cr.console.aliyun.com/ ->登陆->管理中心->镜像加速(根据提示配置)

#  vi /etc/docker/daemon.json              --这是我机器的配置
{
  "registry-mirrors": ["https://uss01m1d.mirror.aliyuncs.com"]
}

#  systemctl daemon-reload
#  systemctl restart docker
#  docker pull centos:7

1、运行docker容器

#  docker run --name py3 -v /data/:/www -p 172.18.108.136:80:80 --privileged -d centos7:py3  /usr/sbin/init

#  docker exec -it py3  bash     --登陆py3容器

2、编译安装python3.6
--安装前先安装依赖软件包

#  yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc-c++  libxml* gzip  zlib zlib-devel

--下载python3.6软件包

#  wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

--解压编译

#  tar -zxvf Python-3.6.3.tar.gz  -C /usr/class="lazy" data-src/  
#  cd /usr/class="lazy" data-src/Python-3.6.3
#  ./configure --prefix=/usr/local/python3  && make && make install
#  ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
#  ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

3、安装django和uwsgi

#  pip3 install django
#  pip3 install uwsgi

--安装的django 和 uwsgi 全部在python的安装目录下下
# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

4、测试uwsgi

#  vim test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')]) 
    return [b"Hello World"]

--运行uwsgi3

#  uwsgi3 --http :80 --wsgi-file test.py
#  lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)

--uwsgi3已经监听80端口
访问http:// 172.18.108.136:80 可见Hello World。

--停止uwsgi3,释放80端口,测试django
# kill -9 1178

5、测试Django
--将django项目创建在/www/apply目录下

#  mkdir /www/apply  && cd /www/apply 

--创建django项目:webapp

#  python3 /usr/local/python/bin/django-admin.py startproject webapp

--运行python3

#  cd webapp/
#  python manage.py runserver 0.0.0.80

访问http:// 172.18.108.136:80 可见下图算成功
Docker手动构建 nginx+py3+uwsgi环境

如访问看到的是以下错误,则需要修改访问的权限

#  vi /www/apply/webapp/webapp/setti ngs.py
28  ALLOWED_HOSTS = ['*']      --在[]里加上*代表允许所有ip访问

Docker手动构建 nginx+py3+uwsgi环境

6、将uwsgi和django连接起来
前面uwsgi和django测试已经没问题,接下来将两个连起来

--确认80端口没有被占用
# uwsgi3 --http :80 --chdir /www/apply/webapp --module webapp.wsgi
备 –chdir 指定项目的绝对路径,--module 是指项目的wsgi模块

#  lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:80 (LISTEN)

访问http:// 172.18.108.136:80 可见下图
代表uwsgi和django已经连起来
Docker手动构建 nginx+py3+uwsgi环境

附:启动uwsgi时需要加很多参数不方便记,我们可以参照官网写一个配置文件来启动

# cd /www/apply/webapp
# vim webapp.ini
[uwsgi]
# Django-related settings 
# the base directory (full path) 
chdir = /www/apply/webapp 

# Django's wsgi file 
module = webapp.wsgi 

# the virtualenv (full path) 
# home = /path/to/virtualenv 

# process-related settings 
# master master = true 

# maximum number of worker processes 
processes = 5

# the socket (use the full path to be safe) 
# socket = /path/to/your/project/mysite.sock 
socket = :81 

# ... with appropriate permissions - may be needed 
# chmod-socket = 664 

# clear environment on exit 
vacuum = true

启动时就改用webapp.ini来启动
# uwsgi3 --ini /www/apply/webapp/webapp.ini

1、编译安装nginx
--编译之前,先安装nginx软件所依赖的软件包

# yum install patch make cmake gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel vim-minimal nano fonts-chinese gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap diffutils pcre

# wget http://nginx.org/download/nginx-1.13.8.tar.gz
# tar -zxvf nginx-1.13.8.tar.gz  -C /usr/local
# cd /usr/local/nginx-1.13.8
# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6  &&  make  && make install

--停掉80端口,启动nginx,如没有报错,
打开浏览器: http:// 172.18.108.136:80 可见:Welcome to nginx

2、配置nginx代理uwsgi

#  vi /usr/local/nginx/conf/nginx.conf
    upstream webapp {         --该段添加在server{}外面,http{}里面
        server 127.0.0.1:81;      --uwsgi3服务器和监听的端口
    }
    server {
        listen 80;
        server_name webapp.com;
        charset utf-8;
        client_max_body_size 75M;       
        location / {
            include uwsgi_params
            uwsgi_pass webapp;
        }
    }

--启动uwsgi3监听81端口

# uwsgi3 --ini /www/apply/webapp/webapp.ini

# lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
uwsgi3  1178 root   3u  IPv4 813312      0t0  TCP *:81 (LISTEN)

--启动nginx监听80端口

# /usr/local/nginx/sbin/nginx -t   --确定nginx没有报错

![](https://s1.51cto.com/images/blog/201804/15/430321341f62f458506e060fb2774147.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

# lsof -i:80
COMMAND  PID USER   FD  TYPE DEVICE SIZE/OFF NODE NAME
nginx   18535  root    6u  IPv4 842111      0t0  TCP *:http (LISTEN)
nginx   18536 nginx    6u  IPv4 842111      0t0  TCP *:http (LISTEN)

访问http:// 172.18.108.136:80 又看到django界面
代表nginx已经成功代理了uwsgi3
Docker手动构建 nginx+py3+uwsgi环境

3、配置MariaDB
--安装mariadb

# yum install mariadb mariadb-devel mariadb-server

--修改配置,将数据目录指向到/www/共享目录下

# vi /etc/my.cnf
[mysqld]
datadir=/www/MariaDB/mysql
socket=/www/MariaDB/mysql/mysql.sock
log-error=/www/MariaDB/log/mariadb.log
pid-file=/www/MariaDB/log/mariadb.pid
log-bin=mariadb-bin

# mkdir /www/MariaDB
# chown mysql.mysql -R /www/MariaDB

# systemctl restart mariadb
# ln -s /www/MariaDB/mysql/mysql.sock /var/lib/mysql/mysql.sock
# mysqladmin -u root password 123456

--创建user和database给django用

# mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE webapp;
MariaDB [(none)]> show databases like 'webapp';
+----------------+
| Database        |
+----------------+
| webapp          |
+----------------+
1 rows in set (0.00 sec)

MariaDB [(none)]> grant all privileges on webapp.* to apply@'%' identified by 'apply';
MariaDB [(none)]> select host,user,password from mysql.user where user='apply';
+--------------+-------+-------------------------------------------+
| host          | user  | password                                     |
+--------------+-------+-------------------------------------------+
| %             | apply | *09B402E6D1FBDF77CD0F6F0CE586137BAD897877 |
+--------------+-------+-------------------------------------------+
1 rows in set (0.00 sec)

MariaDB [(none)]> exit;

4、创建django项目
--创建django项目,测试django连接MySQL

--安装连接mysql数据库插件

# pip install --allow-all-external mysql-connector-python
# vim /www/apply/webapp/webapp/settings.py
DATABASES = {
    'default': { 'ENGINE': 'mysql.connector.django',
    'NAME': 'webapp',
    'USER': 'apply',
    'PASSWORD': 'apply',
    }
}

--安装blog

# cd /www/apply/webapp/
# python3 manage.py startapp blog
# ls              --可以看到在webapp项目下已经有了一个blog文件夹
blog  manage.py  webapp

--修改settings.py 配置文件,添加blog应用

# vim webapp/settings.py
INSTALLED_APPS = ( 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',    --添加此句
 )

--初始化blog数据库数据

# python3 manage.py migrate
Operations to perform:
    Apply all migrations: admin, auth, contenttypes, sessions   
Running migrations:
    Applying contenttypes.0001_initial... OK
    Applying auth.0001_initial... OK
    Applying admin.0001_initial... OK
    Applying admin.0002_logentry_remove_auto_add... OK
    Applying contenttypes.0002_remove_content_type_name... OK
    Applying auth.0002_alter_permission_name_max_length... OK
    Applying auth.0003_alter_user_email_max_length... OK
    Applying auth.0004_alter_user_username_opts... OK
    Applying auth.0005_alter_user_last_login_null... OK
    Applying auth.0006_require_contenttypes_0002... OK
    Applying auth.0007_alter_validators_add_error_messages... OK
    Applying auth.0008_alter_user_username_max_length... OK
    Applying auth.0009_alter_user_last_name_max_length... OK
    Applying sessions.0001_initial... OK

--确认数据库webapp里已经生成了库表

# mysql -uroot -p123456
MariaDB [(none)]> use webapp
MariaDB [webapp]> show tables;
+----------------------------+
| Tables_in_webapp            |
+----------------------------+
| auth_group                  |
| auth_group_permissions     |
| auth_permission             |
| auth_user                   |
| auth_user_groups            |
| auth_user_user_permissions |
| django_admin_log            |
| django_content_type         |
| django_migrations           |
| django_session              |
+----------------------------+
10 rows in set (0.00 sec)

--创建登陆blog的帐号/密码

# python3 manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: root@mail.com
Password:    --输入密码
Password (again):    --再次输入
Superuser created successfully.

--启动uwsgi3,并访问blog论坛
# uwsgi3 --ini /www/apply/webapp/webapp.ini

--访问http:// 172.18.108.136/admin 能看到以下内容,代表已经搭建成功
Docker手动构建 nginx+py3+uwsgi环境

使用前面创建的帐号admin/admin123登陆,如登陆成功则表示成功连接上数据库
注:看到此界面没有任何的css样式和图片,接下来我们做静态图版的反向代理

5、nginx代理静态图片
前面我们已经访问到了blog,但没有css样式,这时我们在浏览器里按下F12->Network
Docker手动构建 nginx+py3+uwsgi环境

可以看到css的访问路径是http://localhost/static/admin/css 这个路径。
在webapp下新建static,然后nginx进行设置

# cd /www/apply/webapp
# mkdir static
# cp -fr /usr/local/python3/lib/python3.6/site-packages/django/contrib/admin/static/admin/ ./static/

--设置nginx代理static

#  vim /usr/local/nginx/conf/nginx.conf
 --在server{}里加入以下
        location /static {
            alias /www/apply/webapp/static;
        }

--重启uwsgi和nginx

#  kill -9 `ps -ef|egrep "uwsgi3|nginx" |grep -v grep |awk '{print $2}'` 

#  nohup uwsgi3 --ini webapp-up.ini &   --启动uwsgi3
#  /usr/local/nginx/sbin/nginx           --启动nginx

 netstat -anlp|egrep "80|81"
tcp  0  0   0.0.0.0:80     0.0.0.0:*    LISTEN    15767/nginx: master 
tcp  0  0   0.0.0.0:81     0.0.0.0:*    LISTEN    15756/uwsgi3

--访问http:// 172.18.108.136/admin 能看到以下内容,代表已经搭建成功
Docker手动构建 nginx+py3+uwsgi环境

可以看到这次访问已经有css样式了,比之前美观

--使用前面创建的帐号/密码登陆进去:admin/admin123
Docker手动构建 nginx+py3+uwsgi环境

--至此搭建完成

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Docker手动构建 nginx+py3

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Docker手动构建 nginx+py3

这里使用的阿里云服务器部署,云服务器ssh登陆成功后,如果几分钟没有操作的话,sshd会自动断开登陆,对于我们来说,在部署软件有时要等很久,经常会发生ssh断开的情况,又或是上个侧所回来ssh就断开了,非常头痛。这里我们要先解决ssh断开连
2023-01-31

Docker容器化Nginx的自动化构建与部署(如何实现Nginx在Docker中的自动化构建与部署?)

本文介绍了使用Docker自动化Nginx构建和部署的详细步骤。通过创建Dockerfile、使用DockerCompose定义服务、运行持续集成和部署(CI/CD)管道,可以实现Nginx在Docker容器中的自动化构建和部署。该方法提供了自动化、一致性、可移植性和可扩展性,从而简化应用程序开发和部署,提高效率和可靠性。
Docker容器化Nginx的自动化构建与部署(如何实现Nginx在Docker中的自动化构建与部署?)
2024-04-02

Docker容器化Nginx的镜像构建与优化(如何构建并优化Nginx的Docker镜像?)

通过Docker容器化Nginx,可获得隔离性、可移植性和资源优化优势。构建NginxDocker镜像涉及创建Dockerfile和构建镜像。优化策略包括选择精简的基础镜像、精简应用代码、使用多阶段构建、缓存构建步骤、使用卷挂载、优化网络配置,以及安全加固。最佳实践包括使用版本控制、自动化构建、定期审核和使用镜像扫描工具。容器化Nginx增强了应用部署和管理,可提供高效、安全和可扩展的Web服务。
Docker容器化Nginx的镜像构建与优化(如何构建并优化Nginx的Docker镜像?)
2024-04-02

Nginx与Docker:构建容器化API网关的实践(如何利用Docker和Nginx构建API网关?)

利用Docker和Nginx构建API网关是一种有效方式,可创建现代、可扩展且可配置的网关解决方案。通过使用Docker构建容器化API网关并利用Nginx的功能,开发人员可以轻松实现反向代理、负载均衡和身份验证等网关功能。通过修改Nginx配置文件并使用Docker工具,可以轻松配置、管理和扩展网关,以及监控其健康和性能。
Nginx与Docker:构建容器化API网关的实践(如何利用Docker和Nginx构建API网关?)
2024-04-02

Nginx与Docker的结合:构建高效Web服务架构(Docker如何助力Nginx构建高性能Web服务?)

Nginx与Docker结合构建高效Web服务架构。Docker容器化分离应用程序和基础设施,微服务架构分解大型应用程序,与Docker契合。Nginx作为反向代理提供负载均衡和HA,缓存功能提高性能,安全功能增强保护。Docker简化部署和管理,提升性能和可扩展性。示例架构包括Nginx、微服务容器、DockerCompose和监控工具。该架构提供高效、可扩展、安全和易于管理的Web服务。
Nginx与Docker的结合:构建高效Web服务架构(Docker如何助力Nginx构建高性能Web服务?)
2024-04-02

手动构建自己的docker容器镜像实战

这篇文章主要介绍了如何手动构建自己的镜像并上传到镜像仓库中,文中有详细的代码实例,需要的朋友可以参考阅读
2023-05-15

Nginx + Docker 手动集群方式运行 EMQ

EMQ X 在支持客户的过程中,了解到有客户使用 Nginx 做负载均衡,Docker 容器手动加入集群的方式运行 EMQ 集群,现将主要过程记录下来。业务需求使用 Nginx 作为反向代理Nginx 需要提前分配好代理 server 的地
2023-06-03

怎么用docker-composer快速构建nginx+php环境

这篇文章主要介绍“怎么用docker-composer快速构建nginx+php环境”,在日常操作中,相信很多人在怎么用docker-composer快速构建nginx+php环境问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-26

Docker与Nginx的联合:构建微服务架构的入口网关(Nginx如何通过Docker成为微服务架构的入口?)

Docker与Nginx联合构建微服务架构的入口网关,提供隔离、可移植性和自动化优势。Nginx作为入口网关管理流量,实现流量路由、负载均衡和故障转移。通过将Nginx部署到Docker容器,可简化构建、部署和扩展过程,满足微服务架构的高可用性、性能和可扩展性要求。
Docker与Nginx的联合:构建微服务架构的入口网关(Nginx如何通过Docker成为微服务架构的入口?)
2024-04-02

使用Docker Compose、Nginx和MariaDB构建弹性的PHP应用程序架构

随着云计算和容器化技术的发展,构建弹性的应用程序架构变得更加重要。在本文中,我们将介绍如何使用Docker Compose、Nginx和MariaDB来构建一个弹性的PHP应用程序架构,并提供具体的代码示例。安装Docker和Docker
2023-10-21

利用Docker Swarm实现Nginx的高可用集群(Docker Swarm如何助力构建Nginx高可用集群?)

通过DockerSwarm编排,可以构建Nginx高可用集群,提升可用性、性能和可扩展性。集群中的多个Nginx实例提供冗余,自动故障转移确保服务在故障时保持可用。Swarm提供负载均衡,将请求分布到集群实例,提升性能。最佳实践包括使用适当的负载均衡算法、监控集群状态、执行滚动更新和测试故障转移。
利用Docker Swarm实现Nginx的高可用集群(Docker Swarm如何助力构建Nginx高可用集群?)
2024-04-02

Docker安装Nginx并部署及MySQL容器构建全过程

本指南详细介绍了在Docker环境中安装Nginx并部署MySQL容器的步骤。从安装Docker开始,逐步讲解了运行Nginx容器、构建MySQL镜像和运行MySQL容器。还包括连接到MySQL、创建数据库和用户的说明。最后,指南提供了配置Nginx反向代理MySQL容器的步骤,并指导读者进行测试。希望这篇指南对读者部署自己的Docker容器有所帮助,并让他们了解使用Docker管理基础设施的优势。
Docker安装Nginx并部署及MySQL容器构建全过程
2024-04-02

使用Docker Compose、Nginx和MariaDB构建可伸缩的PHP应用程序架构

引言:随着云计算和虚拟化技术的发展,使用容器来构建和管理应用程序成为了当今主流的解决方案之一。在传统的应用程序部署中,配置和管理应用程序环境通常是非常繁琐且容易出错的。而使用容器化技术可以将应用程序与其依赖的环境一同打包,从而简化了应用程序
2023-10-21

使用Docker Compose、Nginx和MariaDB构建高可用性的PHP应用程序架构

概述:在开发和部署PHP应用程序时,构建一个高可用性的架构是非常重要的。通过使用Docker Compose、Nginx和MariaDB,我们可以实现一个可靠和可伸缩的应用程序架构。本文将介绍如何使用这些工具搭建一个高可用性的PHP应用程序
2023-10-21

Docker与Nginx结合:实现高效文件下载服务(如何通过Docker和Nginx构建高效的文件下载服务?)

利用Docker和Nginx的强大组合,可以轻松构建高效的文件下载服务。Docker容器提供隔离的运行环境,而Nginx提供负载均衡和缓存功能。这种结合可实现快速可靠的下载。通过创建Docker容器,配置Nginx负载均衡和文件缓存,可显著提高下载性能和可靠性。该解决方案在软件分发、文件托管和数据备份等场景中具有广泛应用,提供可扩展性和易于部署等优点。
Docker与Nginx结合:实现高效文件下载服务(如何通过Docker和Nginx构建高效的文件下载服务?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录