2024 - 11

发现每次自己拿到一个新的Linux系统(通常是ubuntu)都有一些程序性的工作,于是写了这个文档。等我有时间写个脚本出来。

I found that every time I got a new Linux system(usually ubuntu), there was always some procedural work, so I wrote this document. I might write a script when I have time.

一、apt换源

可以先备份一下/etc/apt/sources.list,这一步不做也行。

sudo cp /etc/apt/sources.list /etc/apt/sources_copy.list

然后编辑原来的这个文件,

去这个网站找对应的代码,换成阿里云的源即可(https://developer.aliyun.com/mirror/ubuntu

例如我用ARM Ubuntu16.04,用的是这段

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.aliyun.com/ubuntu-ports/ xenial main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu-ports/ xenial-security main restricted universe multiverse

二、修改每次登录时的默认目录

vi /etc/passwd

找到用户所在行,把后面的路径改成想要的即可

三、查看当前ip

hostname -I

四、配置静态ip

编辑/etc/dhcpcd.conf文件,加入以下内容,重启即可。

#设置网口的静态 IP 地址
interface eth0
static ip_address=192.168.60.242/24
static routers=192.168.60.1
static domain_name_servers=192.168.60.1

#设置 WiFi 的静态 IP 地址
interface wlan0
static ip_address=192.168.60.242/24
static routers=192.168.60.1
static domain_name_servers=192.168.60.1

routers是路由器,domain_name_servers是DNS服务器,一般二者填一样的。

五、配置使用帮助tldr

ubuntu下安装很简单,执行以下三条命令:

sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install -g tldr

如果出现了警告,有可能是因为nodejs版本问题,用一下命令升级nodejs:

sudo apt-get install nodejs-legacy
sudo npm install -g n
sudo n latest

如果升级nodejs失败,可能是Ubuntu版本问题,用以下命令安装稳定版nodejs:

sudo n stable 
sudo node -v

然后再安装tldr

sudo npm install -g tldr

用一下命令可以对tldr更新

tldr --update

六、查看系统架构:

uname -m

x86:Intel;x64:AMD

提示:

/ /中的内容均为本人瞎扯,无视即可。

官方文档:https://docs.docker.com/

中文文档:https://yeasy.gitbook.io/docker_practice/

零、常用命令

#查看已创建的镜像
sudo docker images
#启动
systemctl start docker
#查看docker运行状态
systemctl status docker
#登录
docker login
#拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull python:3.8-slim

一、本地打包Django应用

1.dockerfile

例如我要部署一个Django程序,先生成这个项目的requirements.txt,在项目的根目录执行

#那个点的意思是当前目录
pipreqs . --encoding=utf-8

在项目根目录下新建文件:dockerfile

FROM python:3.8-slim-buster
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt

dockerfile中可以定制的方面有很多,使用的时候查看官方文档。

2.国内镜像加速

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

编辑daemon.json,添加一行:

"registry-mirrors":["阿里云提供的加速地址"];

重启docker服务即可

3.创建和运行

/ 这个过程报错的概率还蛮大的,一步一步根据提示&谷歌改就好了。/

创建:

docker build -f dockerfile路径 . -t 镜像名

创建并运行,此命名将该容器映射到本地80端口:

#docker run -it -d -p 80:8000 --name mysite django_docker_img:v1
docker run -it -d -p 80:8000 --name 容器名 镜像名

mysite是容器名,django_docker_img:v1是镜像名

-t:让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上

-i:让容器的标准输入保持打开

-p:这是将容器中的某一个端口映射到本地主机上,前一个数字是本地主机上的端口,后面的才是容器上的端口。

-d:让容器在后台运行(--detached),这样容器的输出就不会显示在终端了。

可以用docker ps查看运行情况。

进入容器内部:

docker exec -it mysite bash

会发现此刻处于Dockerfile中设置的工作目录,该目录下内容即为项目文件内容。输入exit即可退出。

然后进去用python3 manage.py runserver 0.0.0.0:8000运行Django项目即可,如果有数据库记得迁移。这里如果不用0.0.0.0:8000启动,而是用默认的127.0.0.1:8000,本地主机是访问不了的。

/ 感动!!!!! /

二、在Ubuntu上使用NGINX+uwsgi+Django

0.私有仓库的配置

你可以使用官方 registry 镜像来运行。

docker run -d -p 5000:5000 --restart=always --name registry registry

这将使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000

先在本机查看已有的镜像。

使用 docker tagubuntu:latest 这个镜像标记为 127.0.0.1:5000/ubuntu:latest

格式为 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

使用 docker push 上传标记的镜像。

curl 查看仓库中的镜像。

curl 127.0.0.1:5000/v2/_catalog

这里可以看到 {"repositories":["python"]},表明镜像已经被成功上传了。

1.安装

环境为Ubuntu20.04

安装docker略过,自行查看https://docs.docker.com/engine/install/ubuntu/

安装完后记得修改加速地址:

sudo vim /etc/docker/daemon.json

加入:(阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

{"registry-mirrors": ["阿里云加速地址"]}

保存退出,重启docker:

sudo systemctl reload docker
sudo systemctl restart docker

如果重启docker服务时遇到 docker.service is not active,cannot reload问题需要重启ubuntu系统。

sudo docker info

使用命令之后在最后几行出现以下信息代表配置成功:

Registry Mirrors:
  https://xxxx.mirror.aliyuncs.com/

完成后可以尝试运行一下sudo docker run hello-world看看docker是否安装成功。

2.Python+uwsgi

这里nginx单独一个容器,uwsgi+django为一个容器。

先生成requirements.txt。

先拉取镜像:

docker pull ubuntu:20.04

创建容器并运行:

docker run -it -d --name myubuntu ubuntu:20.04

其中history为镜像名字。

把Django的程序文件拷贝到容器:

docker cp /home/docker/history/ myubuntu:/home/

用如下命令进入容器:

docker exec -it myubuntu bash

给pip和apt换源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

然后安装requirements和django:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple

我安装uwsgi的时候报错:Exception: you need a C compiler to build uWSGI

查资料得知需要安装python-dev,于是:

apt-get update
apt-get install python-dev

进度:

创建了Python3.8容器,但是无法安装uwsgi;另外无法用vi编辑文件;

#安装xrdp
sudo apt-get install xrdp

#开启xrdp服务
sudo service xrdp restart

然后用Windows自带的远程连接就可以了,进去的时候要输入用户名和服务器登入的密码。

Then you could use the remote desktop connection in Windows. Username and password is required when logging in.