百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

DevOps 巅峰战役 01 - 起源 巅峰coldzera

bigegpt 2024-09-27 00:40 3 浏览

产品名:应用中心

产品想法:在手机上我们都有应用商店,应用商店收录了各种各样的app,当我们需要地图导航时只需要安装地图软件即可使用。在我们的开发与生产环境中,linux平台下安装软件需要有经验加持,才能避免各种坑。开发一款基于centos7的应用中心,在日常开发和生产环境中可以快捷方便的安装所需软件,并自动配置让软件相对运行到最优。

工具选择:ansible、nginx、python3、maraidb

  1. ansible:使用jinja2的模板,使用ansible调度功能
  2. nginx:做代理并提供高并发访问
  3. python3:高扩展性可以将功能模块化
  4. maraidb:使用centos7自带的mysql数据库

准备工作:

python3 编译安装

# 编译安装python3.6.4
# yum install libffi-devel -y 
cd /usr/bin
ll python*
mkdir /usr/local/python3
cd /usr/local/python3
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
tar -zxf Python-3.7.4.tgz
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
cd Python-3.7.4
./configure --prefix=/usr/local/python3
make && make install
cd /usr/bin
# 设置软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
# 查看安装的python版本,和之前的python2版本
cd 
python -V
python3 -V
# pip 安装
python3 -m pip install --upgrade pip
python3 -m pip install django
python3 -m pip install pyMySQL
vim /usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/base.py
# 设置软连接
ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin

sqlit3编译安装

# 下载sqlit3 包
cd /usr/local/
wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
tar -zxvf sqlite-autoconf-3290000.tar.gz
# 编译安装
cd sqlite-autoconf-3290000
./configure --prefix=/usr/local
make && make install
mv /usr/local/bin/sqlite3 /usr/local/
rm -rf /usr/local/bin
# 重新设置软连接
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
ln -s /usr/local/sqlite3 /usr/bin/sqlite3
# 设置环境变量
export LD_LIBRARY_PATH="/usr/local/lib"
sed -i "/LD_LIBRARY_PATH/d" /root/.bash_profile
echo "export LD_LIBRARY_PATH=\"/usr/local/lib\"" >> /root/.bash_profile
source /root/.bash_profile

sqlite3 --version

nginx编译安装

# 安装编译环境
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 下载nginx 包
mkdir /usr/local/nginx
cd /usr/local/nginx
wget -c https://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
sed -i -e 's/1.16.0//' -e 's/nginx\//cgls/g' -e 's/"Nginx"/"cgls"/g' src/core/nginx.h
# 编译安装
./configure
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
# 设置软连接
cd /usr/bin
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# nginx设置为服务
cat << EOF > /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
# 设置开机启动
systemctl enable nginx
systemctl start nginx

ansible 安装

# 安装ansible
yum -y install ansible

mariadb 安装

# 安装mariadb
yum -y install mariadb mariadb-server expect
systemctl enable mariadb
systemctl start mariadb

/usr/bin/expect <<EOF
spawn mysql_secure_installation
expect "Enter current password for root (enter for none):" {
send "\r";exp_continue
} "Set root password?" {
send "y\r";exp_continue
} "New password:" {
send "123qwe\r";exp_continue
} "Re-enter new password:" {
send "123qwe\r";exp_continue
} "Remove anonymous users?" {
send "y\r";exp_continue
} "Disallow root login remotely?" {
send "n\r";exp_continue
} "Remove test database and access to it?" {
send "y\r";exp_continue
} "Reload privilege tables now?" {
send "y\r";exp_continue
}
EOF

mysql -uroot -p123qwe -e "GRANT ALL PRIVILEGES ON root.* TO 'root'@'%' IDENTIFIED BY '123qwe';"

创建django项目

# 创建appcenter项目
django-admin startproject appcenter
cd appcenter
python3 manage.py startapp rpm
# 创建库
mysql -uroot -p123qwe -e "CREATE DATABASE appcenter CHARACTER SET utf8;"
# 更新my.cnf
cat << EOF > /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
database = appcenter
user = root
password = 123qwe1
default-character-set = utf8

!includedir /etc/my.cnf.d
EOF
systemctl restart mariadb

# 解决mysql在django中使用的bug
sed -i "s/if version/#if version/g" /usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/base.py
sed -i "s/ raise/# raise/g" /usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/base.py
sed -i "s/query.decode/query.encode/g" /usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py
# pymysql替换MySQLdb
sed -e "import pymysql\npymysql.install_as_MySQLdb()" >> appcenter/__init__.py
# 创建超级用户
python3 manage.py createsuperuser
# 启动服务
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reload
python3 manage.py runserver 0.0.0.0:8000

nginx 发布django项目

# 安装uwsgi
python3 -m pip install uwsgi --upgrade
# 设置软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# uwsgi启动
uwsgi --http :8000 --chdir /root/appcenter/ --module appcenter.wsgi
# 配置uwsgi文件启动项目
mkdir /root/appcenter/script
cat << EOF > /root/appcenter/uwsgi.ini
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/root/appcenter/
# 指定项目的application
module=appcenter.wsgi
# 指定sock的文件路径 
socket=/root/appcenter/script/uwsgi.sock
# 进程个数 
workers=5
pidfile=/root/appcenter/script/uwsgi.pid
# 指定IP端口 
http=:8000
# 指定静态文件
#static-map=/static=/root/appcenter/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/root/appcenter/script/uwsgi.log
EOF

# 执行命令,启动项目
uwsgi --ini /root/appcenter/uwsgi.ini
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

# 配置nginx使用代理
vim /usr/local/nginx/conf/nginx.conf
 upstream djangoserver {
 server 172.16.2.243:8000;
 }

 server {
 listen 80;
 server_name localhost;
 charset utf-8;

 client_max_body_size 75M;

 location / {
 proxy_pass http://djangoserver;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root html;
 }
 }

systemctl stop nginx
systemctl start nginx

效果图

相关推荐

有些人能留在你的心里,但不能留在你生活里。

有时候,你必须要明白,有些人能留在你的心里,但不能留在你生活里。Sometimes,youhavetorealize,Somepeoplecanstayinyourheart,...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

软网推荐:图像变变变 一“软”见分晓

当我们仅需要改变一些图片的分辨率、裁减尺寸、添加水印、标注文本、更改图片颜色,或将一种图片转换为另一种格式时,总比较讨厌使用一些大型的图像处理软件,尤其是当尚未安装此类软件时,更是如此。实际上,只需一...

首款WP8.1图片搜索应用,搜照片得资料

首款WP8.1图片搜索应用,搜照片得资料出处:IT之家原创(天际)2014-11-1114:32:15评论WP之家报道,《反向图片搜索》(ReverseImageSearch)是Window...

分享一组美图(图片来自头条)(头条美女头像)

...

盗墓笔记电视剧精美海报 盗墓笔记电视剧全集高清种子下载

出身“老九门”世家的吴邪,因身为考古学家的父母在某次保护国家文物行动时被国外盗墓团伙杀害,吴家为保护吴邪安全将他送去德国读书,因而吴邪对“考古”事业有着与生俱来的兴趣。在一次护宝过程中他偶然获得一张...

微软调整Win11 24H2装机策略:6月起36款预装应用改为完整版

IT之家7月16日消息,微软公司今天(7月16日)发布公告,表示自今年6月更新开始,已默认更新Windows1124H2和WindowsServer2025系统中预装...

谷歌手把手教你成为谣言终结者 | 域外

刺猬公社出品,必属原创,严禁转载。合作事宜,请联系微信号:yunlugongby贾宸琰编译、整理11月23日,由谷歌新闻实验室(GoogleNewsLab)联合Bellingcat、DigD...

NAS 部署网盘资源搜索神器:全网资源一键搜,免费看剧听歌超爽!

还在为找不到想看的电影、电视剧、音乐而烦恼?还在各个网盘之间来回切换,浪费大量时间?今天就教你如何在NAS上部署aipan-netdisk-search,一款强大的网盘资源搜索神器,让你全网资源...

使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建

前言回顾在上一篇文章《搭建持久化的INFINIConsole与Easysearch容器环境》中,我们详细介绍了如何使用基础的dockerrun命令,手动启动和配置INFINICon...

为庆祝杜特尔特到访,这个国家宣布全国放假?

(观察者网讯)近日,一篇流传甚广的脸书推文称,为庆祝杜特尔特去年访问印度,印度宣布全国放假,并举办了街头集会以示欢迎。菲媒对此做出澄清,这则消息其实是“假新闻”。据《菲律宾世界日报》2日报道,该贴子...

一课译词:毛骨悚然(毛骨悚然的意思是?)

PhotobyMoosePhotosfromPexels“毛骨悚然”,汉语成语,意思是毛发竖起,脊梁骨发冷;形容恐惧惊骇的样子(withone'shairstandingonend...

Bing Overtakes Google in China&#39;s PC Search Market, Fueled by AI and Microsoft Ecosystem

ScreenshotofBingChinahomepageTMTPOST--Inastunningturnintheglobalsearchenginerace,Mic...

找图不求人!6个以图搜图的识图网站推荐

【本文由小黑盒作者@crystalz于03月08日发布,转载请标明出处!】前言以图搜图,专业说法叫“反向图片搜索引擎”,是专门用来搜索相似图片、原始图片或图片来源的方法。常用来寻找现有图片的原始发布出...

浏览器功能和“油管”有什么关联?为什么要下载

现在有没有一款插件可以实现全部的功能,同时占用又小呢,主题主要是网站的一个外观,而且插件则主要是实现wordpress网站的一些功能,它不仅仅可以定制网站的外观,还可以实现很多插件的功能,搭载chro...