草庐IT

【云原生 | Docker】腾讯云部署Django项目 (服务器选型、git配置、docker三分钟部署)

计算机魔术师 2023-07-25 原文

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

该文章收录专栏
—【Django | 项目开发】从入门到上线 专栏—

书接上文我们使用docker部署好了 nginx gunicorn mysql django,本文将项目部署到腾讯云服务器中进行线上测试
【云原生 | Docker】部署 Django & Nginx & Gunicorn
【云原生| Docker】 部署 Django & mysql 项目

文章目录

一、腾讯服务器部署

1.1 服务器选择

  1. 服务器购买

部署的第一步是购买云服务器,博主在第一次购买时很纠结与购买那个服务器(心疼钱😑),在网上查阅多方资料,推荐 校园云服务器,对于学生优惠好一点 一年60(点击链接跳转查看

文章同款服务器 是, 校园云服务器 轻量应用服务器2核2G对于学习和部署小型应用已经足够使用了。

在准备好服务器后,我们可以下载xshell,xftp连接工具 xshell官网地址(需要获取服务器公网ip连接和设置实例密码),连接到云服务器实例。

注意:需要使用root管理员登录,不然没有权限进行操作

1.2 启动项目

1.2.1拉取代码

有两种办法获取我们的代码

  1. 我们在github或者gitee上拉取我们的项目

a. 首先安装git

sudo yum install -y git

他会自动安装所有的依赖,查看版本

b. 配置
.配置一个用于提交代码的用户,输入指令:

git config --global user.name "Your Name"

同时配置一个用户的邮箱,输入命令:

git config --global user.email "email@example.com"

生成公钥和私钥(用于github)

ssh-keygen -t rsa -C  "Your@email.com" //执行后一直回车即可

获取ssh key公钥内容(id_rsa.pub)

cd ~/.ssh
cat id_rsa.pub

复制全部内容

第四步:Github账号上添加公钥
进入Settings设置
添加ssh key,把刚才复制的内容粘贴上去保存即可

第五步:验证是否设置成功

ssh -T git@github.com  // 而后填写 yes

显示如下信息表明设置成功

在clone仓库的时候使用ssh便不需要再次账号验证了

d. 拉取代码

cd /   
mkdir code
cd code 
git init 
git pull git@github.com:Yourname/仓库名称.git 

拉取成功

  1. 我们使用传输工具将文件传输过去(不推荐,一般部署项目都是拉取代码托管平台的)

我们在选择镜像时已经在购买腾讯云服务器选择了docker,所以这里不用再安装

1.2.2 docker启动

如果是其他云服务器,或者已有服务器但没有下载安装docker, 以下是我觉得挺不错的文章
参考一:https://cloud.tencent.com/developer/article/1701451
参考二:https://blog.csdn.net/JunyouYH/article/details/120584027

docker命令启动镜像

docker-compose up  --bulid

这一步的是 docker-compose buile --no-caheddocker-compose up -d的结合

  1. 错误一
    构建镜像,运行容器,但是对于mysql又可能会报如下错误

解决过程:

  1. 根据报错一Different lower_case_table_names settings for server ('1') and data dictionary ('2').,猜测原因是docker-compose upmysql8数据库的问题,(linux自身启动默认开启 lower_case_table=0, 且无法启动镜像)
    方案cp配置文件下来,修改结束cp回去,修改lower_case_table=1,仍然报错,变化了数字,0 - > 1, 尝试设置为2, 报错回原来的信息,

​ 阿里云解答 https://help.aliyun.com/document_detail/147946.html

  1. 根据报错二:Data Dictionary initialization failed.
    a. 删除/var/lib/mysql文件,失败
    b. 注释掉#datadir=xxx , 失败
    c. 数据加载目录 datadir 中在上传文件时docker对于挂载在var/lib/mysql已存在文件,删除整个文件,重新构造镜像, 解决! 🎉🎉🎉

​ 参考:https://blog.csdn.net/liurui50/article/details/105478422
参考:https://blog.csdn.net/qq_33801641/article/details/120756083

  1. 如果都解决不了最后思路:`mysql``,重新构造
  1. 错误二
    编码错误如下,存储内容包括特殊字符无法使用utf8存贮

    修改默认编码
    参考文章一: https://blog.csdn.net/z_jianghai/article/details/119209544
    参考文章二https://www.codenong.com/cs105377341/
    参考文章三: https://blog.csdn.net/dy_miao/article/details/91461581

建议直接挂载配置文件吧,docker容器默认给mysql编码就是latin1,这是不支持中文的
挂载目标文件 :/etc/mysql/conf.d/mysql.cnf

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

再在dockerfile.yml 中对 mysql容器加上命令 (这个命令只能让server 和 database 参数变为 utf8mb4 其他变量需要修改配置文件)

command: "mysqld --user=root --explicit_defaults_for_timestamp --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci"

假如我们已经生成了数据库中的表怎么办呢,此时修改数据库配置是无效的,因为这些表已经生成,配置是对以后生成的表设置,现在的表如何修改呢?最简单粗暴的方法就是删掉数据库,重新迁移便可(此时是测试使用,开发Django框架,弄了我一个下午🤷‍♀️)

1.2、访问项目

公网ip访问部署在云服务器的web项目,配置安全组

配置安全组参考文章

访问。登录后台后会出现

需要在settiing文件中添加公网ip

进入容器

docker exec -it [container_id] /bin/bash

python manage.py createsuperuser # 创建超级用户用于登录

部署反思:

  1. 部署项目应该保持干净的目录

  2. 运行测试所生成的数据或文件不要带入部署文件中

  3. 测试代码与部署代码部分在上传也应该修改好

     		        🤞到这里,如果还有什么疑问🤞
     	🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
     		🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
    

有关【云原生 | Docker】腾讯云部署Django项目 (服务器选型、git配置、docker三分钟部署)的更多相关文章

  1. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  6. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  7. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  8. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  9. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  10. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

随机推荐