如何在 Ubuntu 22.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。

如何在 Ubuntu 22.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

介绍

“LAMP”堆栈是一组开源软件,通常安装在一起,以使服务器能够托管用 PHP 编写的动态网站和 Web 应用程序。该术语是一个缩写词,代表带有A pache Web 服务器的****Linux操作系统。站点数据存储在MySQL数据库中,动态内容由****PHP处理。

在文中,我们将在 Ubuntu 22.04 服务器上设置 LAMP 堆栈。

先决条件

为了完成本教程,我们需要有一个 Ubuntu 22.04 服务器,该服务器具有sudo权限的非 root用户帐户和基本防火墙。这可以参考Ubuntu 20.04 初始服务器设置指南进行配置。

第 1 步 — 安装 Apache 并更新防火墙

Apache Web 服务器是世界上最流行的 Web 服务器之一。它有完善的文档,拥有活跃的用户社区,并且在网络历史的大部分时间里都被广泛使用,这使得它成为托管网站的绝佳选择。

首先更新包管理器缓存。如果这是我们第一次在sudo会话中使用,系统将提示我们提供用户密码,以确认我们拥有管理系统软件包apt的正确权限:

sudo apt update

然后,使用以下命令安装 Apache:

sudo apt install apache2

系统将提示我们确认 Apache 的安装。按 确认Y,然后按ENTER

安装完成后,我们需要调整防火墙设置以允许 HTTP 流量。Ubuntu 的默认防火墙配置工具称为简单防火墙 (UFW)。它具有可供我们利用的不同应用程序配置文件。要列出所有当前可用的 UFW 应用程序配置文件,请执行以下命令:

sudo ufw app list
Output
 Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

以下是每个配置文件的含义:

  • Apache:此配置文件仅打开端口80(正常、未加密的 Web 流量)。
  • Apache Full:此配置文件打开端口80(正常、未加密的 Web 流量)和端口443(TLS/SSL 加密流量)。
  • Apache Secure:此配置文件仅打开端口443(TLS/SSL 加密流量)。

目前,最好仅允许 port 上的连接80,因为这是全新的 Apache 安装,并且我们尚未配置 TLS/SSL 证书以允许服务器上的 HTTPS 流量。

要仅允许端口80上的流量,请使用Apache配置文件:

sudo ufw allow in "Apache"

通过以下方式验证更改:

sudo ufw status
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                                
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)                    
Apache (v6)                ALLOW       Anywhere (v6)     

现在允许80端口上的流量通过防火墙。

我们可以立即进行抽查,通过在网络浏览器中访问服务器的公共 IP 地址来验证一切是否按计划进行:

http://your_server_ip

默认的 Ubuntu 22.04 Apache 网页用于提供信息和测试目的。以下是 Apache 默认网页的示例:

Ubuntu 22.04 Apache 默认网页,其中概述了默认配置设置

如果我们可以查看此页面,则表明我们的 Web 服务器已正确安装并且可以通过防火墙进行访问。

如何查找服务器的公共 IP 地址

如果我们不知道服务器的公共 IP 地址是什么,可以通过多种方法找到它。通常,这是我们用于通过 SSH 连接到服务器的地址。

有几种不同的方法可以从命令行执行此操作。首先,我们可以使用iproute2工具通过输入以下内容来获取我们的 IP 地址:

ip addr show ens3 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

这将为我们返回两到三行。它们都是正确的地址,但我们的计算机可能只能使用其中之一,因此只能一个一个试。

另一种方法是使用curl实用程序联系外部方,告诉我们它如何看待我们的服务器。这是通过询问特定服务器我们的 IP 地址是什么来完成的:

curl http://icanhazip.com

无论我们选择哪种方法,都需要在网络浏览器中输入我们的 IP 地址以验证我们的服务器是否正在运行。

第 2 步 — 安装 MySQL

上一步我们已经启动并运行了 Web 服务器,现在需要安装数据库系统才能存储和管理站点的数据。MySQL 是 PHP 环境中使用的流行数据库管理系统。

使用apt获取并安装该软件:

sudo apt install mysql-server

出现提示时,通过按Y 确认安装,然后按ENTER

安装完成后,建议我们运行 MySQL 预装的安全脚本mysql_secure_installation。该脚本将删除一些不安全的默认设置并锁定对数据库系统的访问。

警告:自 2022 年 7 月起,如果我们在没有进一步配置的情况下运行脚本,将会发生错误。原因是该脚本将尝试为安装的MySQL 帐户设置root 密码,但默认情况下,在 Ubuntu 安装上,该帐户未配置为使用密码进行连接。

在 2022 年 7 月之前,此脚本在尝试设置root帐户密码并继续执行其余提示后会默默失败。在我们输入并确认密码后,脚本将返回以下错误:

Output ... 
Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

New password:

这将导致脚本进入递归循环,只能通过关闭终端窗口来退出该循环。

但是由于mysql_secure_installation脚本执行许多其他操作对于确保 MySQL 安装安全非常有用,因此仍然建议在开始使用 MySQL 管理数据之前运行它。不过,为了避免进入此递归循环,我们需要首先调整MySQLroot用户的身份验证方式。

首先,打开MySQL提示符:

sudo mysql

然后运行以下命令将root用户的身份验证方法更改为使用密码的身份验证方法。以下示例将身份验证方法更改为:mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

进行此更改后,退出 MySQL 提示符:

exit

之后,我们可以mysql_secure_installation毫无问题地运行脚本。

通过运行以下命令启动交互式脚本:

sudo mysql_secure_installation

这将询问我们是否要配置VALIDATE PASSWORD PLUGIN.

**注意:**启用此功能需要进行判断。如果启用,不符合指定条件的密码将被 MySQL 拒绝并显示错误。禁用验证是安全的,但我们应该始终对数据库凭据使用强且唯一的密码。

回答Y“是”,或者选择其他任何选项以继续而不启用。

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

如果我们回答“是”,系统会要求我们选择密码验证级别。请注意,如果我们设置任何不包含数字、大小写字母和特殊字符的密码时,我们将收到错误消息:

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

无论我们是否选择设置,我们的服务器接下来都会要求我们选择并确认 MySQL root用户的密码。不要将其与system root混淆。数据库root用户是对数据库系统拥有完全权限的管理用户。

如果我们启用了密码验证,我们将看到刚刚输入的 root 密码的密码强度,并且我们的服务器将询问我们是否要继续使用该密码。如果我们对当前密码感到满意,请在提示时输入“yes”:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

对于其余问题,请在每个提示时按下Y并击键ENTER。这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重我们所做的更改。

完成后,输入以下命令测试是否能够登录 MySQL 控制台:

sudo mysql

这将以管理数据库用户root的身份连接到 MySQL 服务器,这是通过sudo运行此命令时使用推断的。下面是一个示例输出:

Output
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

要退出 MySQL 控制台,请输入:

exit

请注意,即使我们在运行脚本时定义了密码,也无需提供密码即可以使用root用户身份进行连接。这是因为管理 MySQL 用户的默认身份验证方法为unix_socket不是password(一个实际的的例子就是忘记了root密码,但仍然可以使用数据库来重置它)。尽管这看起来像是一个安全问题,但它使数据库服务器更加安全,因为唯一允许以root MySQL 用户身份登录的用户是具有 sudo 权限的系统用户,这些系统用户从控制台或通过以相同权限运行的应用程序连接。实际上,这意味着我们将无法使用管理数据库root用户从 PHP 应用程序进行连接。为root MySQL 帐户设置密码可以起到保护作用,以防默认身份验证方法从unix_socket 更改为password

为了提高安全性,最好为每个数据库设置专用的用户帐户,并设置较少的权限,特别是如果我们计划在服务器上托管多个数据库。

**注意:**有一些旧版本的 PHP不支持 MySQL 8 的默认身份验证方法mysql_native_password。因此,在 MySQL 8 上为 PHP 应用程序创建数据库用户时,我们可能需要配置应用程序以使用mysql_native_password插件,第6步会说这个。

第 3 步 — 安装 PHP

我们安装了 Apache 来提供我们的内容,并安装了 MySQL 来存储和管理我们的数据。PHP 是我们设置的组件,它将处理代码以向最终用户显示动态内容。除了该php软件包之外,我们还需要一个 PHP 模块php-mysql,该模块允许 PHP 与基于 MySQL 的数据库进行通信。我们还需要libapache2-mod-php启用 Apache 来处理 PHP 文件。核心 PHP 包将作为依赖项自动安装。

要安装这些软件包,请运行以下命令:

sudo apt install php libapache2-mod-php php-mysql

安装完成后,运行以下命令来确认我们的 PHP 版本:

php -v
Output
PHP 8.1.2 (cli) (built: Mar  4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

此时,我们的 LAMP 堆栈已完全运行,但在使用 PHP 脚本测试我们的设置之前,最好设置一个适当的Apache 虚拟主机来保存网站的文件和文件夹。

第 4 步 — 为我们的网站创建虚拟主机

使用 Apache Web 服务器时,我们可以创建虚拟主机(类似于 Nginx 中的服务器块)来封装配置详细信息并从一台服务器托管多个域。在本文中,我们将设置一个名为your_domain的域。

Ubuntu 22.04 上的 Apache 默认启用一台虚拟主机,该虚拟主机配置为提供/var/www/html目录中的文档。虽然这对于单个站点来说效果很好,但如果我们托管多个站点,它可能会变得笨拙。下来就要为your_domain站点创建一个/var/www/html目录结构,如果客户端请求与任何其他站点不匹配,则将其保留为要提供服务的默认目录。

如下所示:

sudo mkdir /var/www/your_domain

接下来,使用环境变量分配目录的所有权$USER,该变量将引用我们当前的系统用户:

sudo chown -R $USER:$USER /var/www/your_domain

然后,使用nano编辑器在 Apache 目录中打开一个新的配置文件。

sudo nano /etc/apache2/sites-available/your_domain.conf

这将创建一个新的空白文件。使用我们自己的域名添加以下基本配置:

/etc/apache2/sites-available/your_domain.conf

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain 
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

完成后保存并关闭文件。按CTRL+X,然后按Y和按ENTER

现在,使用a2ensite启用新的虚拟主机:

sudo a2ensite your_domain

如果想要禁用随 Apache 安装的默认网站:

sudo a2dissite 000-default

检查配置文件是否有语法错误,请运行以下命令:

sudo apache2ctl configtest

最后,重新加载 Apache 以使这些更改生效:

sudo systemctl reload apache2

现在新网站现已激活,但网站根目录仍为空。创建一个文件以测试虚拟主机是否按预期工作:

nano /var/www/your_domain/index.html

在此文件中包含以下内容:

/var/www/your_domain/index.html

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

保存并关闭文件,然后转到浏览器并访问服务器的域名或IP地址:

http://server_domain_or_IP

网页应展示我们刚刚编辑的文件中的内容:

Apache 虚拟主机测试登陆页面,向用户显示我们的 HTML 代码

我们可以保留此文件作为应用程序的临时登录页面,直到我们设置index.php文件来替换它。执行此操作后,请记住从文档根目录中删除或重命名该文件,因为默认情况下index.php将优先于index.html文件。

在下一步中,我们将创建一个 PHP 脚本来测试 PHP 是否已在我们的服务器上正确安装和配置。

第 5 步 — 在 Web 服务器上测试 PHP 处理

现在我们已经有了一个自定义位置来托管网站的文件和文件夹,请创建一个 PHP 测试脚本来确认 Apache 能够处理和处理对 PHP 文件的请求。

在自定义 Web 根文件夹中创建一个名为info.php的新文件:

nano /var/www/your_domain/info.php

这将打开一个空白文件。在文件内添加以下文本(这是有效的 PHP 代码):

/var/www/your_domain/info.php

<?php
phpinfo();

完成后,保存并关闭文件。

要测试此脚本,请转到 Web 浏览器并访问服务器的域名或 IP 地址,后跟脚本名称,在本例中为info.php

http://server_domain_or_IP/info.php

以下是默认 PHP 网页的示例:

Ubuntu 22.04 PHP 网页显示有关当前 PHP 版本和设置的相关信息

此页面从 PHP 的角度提供有关我们的服务器的信息。它对于调试和确保正确应用我们的设置很有用。

如果我们在浏览器中看到此页面,则说明我们的 PHP 安装正常。

通过该页面检查有关 PHP 服务器的相关信息后,最好删除我们创建的文件,因为它包含有关 PHP 环境和 Ubuntu 服务器的敏感信息:

sudo rm /var/www/your_domain/info.php

如果我们稍后需要再次访问该信息,我们可以随时重新创建此页面。

第 6 步 — 从 PHP 测试数据库连接(可选)

如果我们想测试 PHP 是否能够连接到 MySQL 并执行数据库查询,我们可以创建一个包含测试数据的测试表,并从 PHP 脚本查询其内容。在此之前,我们需要创建一个测试数据库和一个正确配置为访问该数据库的新 MySQL 用户。

创建名为example_database的数据库和名为example_user 的用户。我们可以将这些名称替换为不同的值。

首先,使用root帐户连接到 MySQL 控制台:

sudo mysql

要创建新数据库,请从 MySQL 控制台运行以下命令:

CREATE DATABASE example_database;

现在创建一个新用户并授予他们对我们刚刚创建的自定义数据库的完全权限。

以下命令创建一个名为example_user 的新用户,该用户使用该caching_sha2_password方法进行身份验证。我们将此用户的密码定义为password

CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

注意:前面的ALTER USER语句设置root MySQL 用户以使用caching_sha2_password插件进行身份验证。根据 MySQL 官方文档,caching_sha2_password是 MySQL 的首选身份验证插件.

但是,某些版本的 PHP 不能兼容caching_sha2_password. PHP 报告说,这个问题在 PHP 7.4 中已得到修复,下来如果我们尝试登录 phpMyAdmin 时遇到错误,可能需要设置root来进行mysql_native_password身份验证:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

现在授予该用户对example_database数据库的权限:

GRANT ALL ON example_database.* TO 'example_user'@'%';

这将赋予example_user用户对example_database数据库的完全权限,同时防止该用户在我们的服务器上创建或修改其他数据库。

现在退出 MySQL shell:

exit

通过再次登录 MySQL 控制台(这次使用自定义用户凭据)来测试新用户是否具有适当的权限:

mysql -u example_user -p

请注意此命令中的标志,它将提示我们输入创建example_user-p用户时使用的密码。登录MySQL控制台后,确认我们有权访问example_database数据库:

SHOW DATABASES;

这将为我们提供以下输出:

Output
+--------------------+
| Database           |
+--------------------+
| example_database   |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

接下来,创建一个名为todo_list的测试表。从 MySQL 控制台运行以下语句:

CREATE TABLE example_database.todo_list (
	item_id INT AUTO_INCREMENT,
	content VARCHAR(255),
	PRIMARY KEY(item_id)
);

在测试表中插入几行内容。使用不同的值重复下一个命令几次以填充测试表:

INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

要确认数据已成功保存到表中,请运行:

SELECT * FROM example_database.todo_list;

以下是输出:

Output
+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

确认测试表中有有效数据后,退出 MySQL 控制台:

exit

现在我们可以创建连接到 MySQL 并查询内容的 PHP 脚本。在自定义 Web 根目录中创建一个新的 PHP 文件:

nano /var/www/your_domain/todo_list.php

以下 PHP 脚本连接到 MySQL 数据库并查询todo_list表的内容,并在列表中显示结果。如果数据库连接出现问题,就会抛出异常。

/var/www/your_domain/todo_list.php

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

完成编辑后保存并关闭文件。

现在,我们可以通过访问为我们的网站配置的域名或公共 IP 地址,然后在 Web 浏览器中访问此页面/todo_list.php

http://your_domain_or_IP/todo_list.php

此网页应向访问者显示我们在测试表中插入的内容:

浏览器中的 PHP 待办事项列表网页示例

这说明我们的 PHP 环境已准备好与 MySQL 服务器连接并交互。

结论

在本文中,我们使用 Apache 作为 Web 服务器,使用 MySQL 作为数据库系统,为向访问者提供 PHP 网站和应用程序服务奠定了灵活的基础。

下一步,我们应该通过 HTTPS 提供服务,确保与 Web 服务器的连接是安全的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/339845.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux之进程管理篇(1)

初识进程 1.1 进程 进程&#xff1a;是具有独立功能的一次运行过程&#xff0c;是系统进行资源分配和调度的基本单位。Linux创建新进程时会为其指定和一个唯一的号码&#xff0c;即进程号(PID),以此区别不同的进程。进程不是程序&#xff08;程序&#xff1a;执行特定任务的一…

Istio

1、Istio介绍 Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架。 官网&#xff1a;https://istio.io/latest/zh/ 官方文档&#xff1a;https://istio.io/docs/ 中文官方文档&#xff1a;https://istio.io/zh/docs Github地址&#xff1a;https://github.com…

Kubernetes/k8s之包管理器helm

helm 在没有helm之前&#xff0c;我们要部署一个服务&#xff0c;deployment、service ingress 的作用通过打包的方式。把deployment、service ingress打包在一块&#xff0c;一键式部署服务。类似于yum功能。是官方提供的类似安装仓库的功能&#xff0c;可以实现一键化部署应…

Python量化交易- mplfinance库 -画K线图

mplfinance库 1. mplfinance 模块说明2. mplfinance安装3. mplfinance 模块 plot 基本用法参数typestylemake_addplot设置图表颜色 make_marketcolors添加图表样式 make_mpf_style 4. mplfinance 的基本K线图实现自定义风格和颜色图表尺寸调整、相关信息的显示添加完整移动平均…

C语言爬虫程序编写的爬取APP通用模板

互联网的飞快发展&#xff0c;尤其是手机终端业务的发展&#xff0c;让越来越多的事情都能通过手机来完成&#xff0c;电脑大部分的功能也都能通过手机实现&#xff0c;今天我就用C语言写一个手机APP类爬虫教程&#xff0c;方便后期拓展APP爬虫业务。而且这个模板是通用的适合各…

SIP12 脚模块式单路交流信号隔离变送器0~1VAC/0~5VAC转4-20mA/0-5VDC

概述&#xff1a; IPO AC系列模块式交流电压隔离变送器&#xff0c;能将输入的交流信号按比例转换成4~20mA标准信号, 输入为0~1Vrms等交流电压信号&#xff1b;输出为4~20mA直流电流信号或0~5VDC直流电压信号。实现辅助电源和输入输出信号之间2500VDC隔离&#xff0c;输入信号…

DevOps系列文章之 GitLab CI/CD

CICD是什么? 由于目前公司使用的gitlab&#xff0c;大部分项目使用的CICD是gitlab的CICD&#xff0c;少部分用的是jenkins&#xff0c;使用了gitlab-ci一段时间后感觉还不错&#xff0c;因此总结一下 介绍gitlab的CICD之前&#xff0c;可以先了解CICD是什么 我们的开发模式…

力扣刷MySQL-第五弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

超级菜鸟怎么学习数据分析?

如果你有python入门基础&#xff0c;在考虑数据分析岗&#xff0c;这篇文章将带你了解&#xff1a;数据分析人才的薪资水平&#xff0c;数据人应该掌握的技术栈。 首先来看看&#xff0c;我在搜索数据分析招聘时&#xff0c;各大厂开出的薪资&#xff1a; 那各大厂在数据领域…

【Spring 篇】MyBatis多表操作:编织数据的交响乐

欢迎来到MyBatis的多表操作世界&#xff01;在这个充满交响乐的舞台上&#xff0c;我们将探索如何巧妙地编织多个数据表的数据&#xff0c;创造出一场旋律动听的数据交响曲。无需繁琐的SQL拼接&#xff0c;MyBatis让多表操作变得优雅而简单。让我们一起进入这个音乐殿堂&#x…

二.Winform使用Webview2在Demo1中实现地址简单校验

Winform使用Webview2在Demo1中实现地址简单校验 往期目录回顾添加对于的简单url验证提示通过上节和本节涉及到的函数有 往期目录 往期相关文章目录 专栏目录 回顾 通过一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址 我们已经知道了解决资源…

裁员背景下 | 【2024年人生的里程碑】作为独立开发者,第一次承接外包项目的心得经历,也许说出你的心声哦!

&#x1f6aa; 每日一句 种子不落在肥土而落在瓦砾中&#xff0c;有生命力的种子决不会悲观和叹气&#xff0c;因为有了阻力才有磨炼。 背景介绍 在裁员背景下&#xff0c;寻找自主承包项目成为了一种可行且具有吸引力的选择。对于职业技术人员而言&#xff0c;自主承包项目不…

【服务器】Xshell与Xftp软件的使用指南

目录 【Xshell软件】 1.1 Xshell软件的功能 1.2 Xshell软件的使用 【Xftp软件】 2.1 Xftp软件的功能 2.2 Xftp软件的使用 可替代产品【FinalShell】 3.1 FinalShell软件的使用 3.2 FinalShell连接服务器失败解决方法 可替代产品【FileZilla】

暴力破解常见的服务器

目录 使用 pydictor 生成自己的字典工具liunx下载使用常用的参数说明插件型字典 (可自己根据 API 文档开发) 使用 hydra 工具在线破解系统用户密码使用 hydra 破解 windows 7 远程桌面密码使用 hydra 工具破解 ssh 服务 root 用户密码 使用 Medusa 工具在线破解medusa参数说明M…

STM32之RTC实时时钟

一、实时时钟概述 1、实时时钟介绍 英文缩写&#xff1a;RTC。显示年、月、日、时、分、秒、星期,自动计算闰年&#xff0c;能够区分每个月的天数。 RTC特点&#xff1a;能从RTC获取到具体的日期时间&#xff0c;断掉后再开机时间仍然准确&#xff08;需要纽扣电池&#xff…

JSON简单了解

文章目录 1、JSON介绍2、ES6模版字符串3、JS对象转化为JSON字符串3.1、手动JS对象转化为JSON字符串3.2、自动JS对象转化为JSON字符串 4、JS对象和java互相转换 1、JSON介绍 JSON 概念&#xff1a;JavaScript Object Notation。JavaScript 对象表示法&#xff0c;简单理解JSON是…

如何控制项目管理中的日程冲突?

《全球公司生产力报告》发现&#xff0c;62% 的公司领导表示&#xff0c;资源调度是他们在项目管理方面面临的最大挑战。其中&#xff0c;日程冲突是利用共享资源池管理多个项目的典型挑战。例如&#xff0c;团队成员参与的活动可能会重叠&#xff0c;也可能是任务分配给了无法…

设计模式篇---中介者模式

文章目录 概念结构实例总结 概念 中介者模式&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 就好比世界各个国家之间可能会产生冲突&#xff0c;但是当产…

乡镇县城小市场的外卖服务需求,现在是属于谁的机遇?

目前&#xff0c;县域经济正面临着几大利好。“返乡就业、返乡创业和告老还乡”现象越发普遍&#xff0c;这不仅在小县城中有所体现&#xff0c;同样在乡镇中也呈现出同样的趋势。一些产业链和工厂纷纷下沉到乡镇&#xff0c;带来了更多的就业机会。这不仅能够吸引年轻人回乡就…

【C初阶——基础刷题】刷题8

本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 题目链接T1&#xff1a;T2:T3&#xff1a;T4&#xff1a;T5:T6:T7&#xff1a;T8&#xff1a;…
最新文章