8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用物理服务器在 cpanel 和 whm 上部署 MERN 应用程序

joseville 2月前

107 0

我正在尝试通过 cpanel 和 whm 在生产服务器上安装我的开发项目,服务器是物理的,我正在使用 ubuntu,步骤是什么,而不会影响任何其他已部署的网站......

我正在尝试通过 cpanel 和 whm 在服务器上安装我的开发项目以供生产,服务器是物理的,我正在使用 ubuntu,请问步骤是什么,不影响任何其他已部署的网站,请注意 apache 默认安装在 cpanel 上。我正在使用 nodejs、express、react 和 mysql。我已经安装了 mysql 和 node 和 pm2,并且已经成功连接到我的节点应用程序中的 mysql,现在我只能在正确的位置部署我的节点应用程序,而无需编辑任何端口或影响任何其他网站并将其连接到我的 react 应用程序。注意:我可以访问 WHM 和 cPanel。

我尝试过使用 nginx,我的服务器可以工作,但是其他部署的网站都崩溃了,然后我发现当我尝试安装 nginx 时我错误地关闭了主端口 80,因此所有网站都崩溃了。现在我想在我的物理服务器上运行我的项目并在其上应用 ssh,而不影响任何其他端口或网站。

帖子版权声明 1、本帖标题:使用物理服务器在 cpanel 和 whm 上部署 MERN 应用程序
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由joseville在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 因此,对于我正在开发的游戏,我使用基于继承的有限状态系统作为敌人和老板的 AI。然而,我遇到了一些与它的实现有关的问题。基状态类是继承的...

    因此,对于我正在开发的游戏,我使用基于继承的有限状态系统作为敌人和老板的 AI。然而,我在实施过程中遇到了一些问题。

    每个状态都会继承基础状态类,例如 AirPatrol 状态继承自 \'EnemyState\'。但是,AirPatrol 类具有诸如 \'moveSpeed\'、\'aggroDistance\' 等变量(而 EnemyState 没有),我想从类外部访问这些变量,因此我将它们设为公共。在敌人的状态机类(管理切换状态等的地方)中,我有一个公共 \'currentState\' 变量,用于保存当前状态。

    但是,如果我尝试引用 currentState.moveSpeed,则会收到“不包含定义”错误。我理解为什么这不起作用,因为并非每个 EnemyState 都有“moveSpeed”变量,但是有没有一种简单/可靠的方法来进行此类变量修改,而无需将速度变量添加到基本 EnemyState 类?

    脚本如下:

    安全无人机 AI 类(这是我的问题)

    public class SecurityDroneAI : EnemyController
    {
        [Header("Movement")]
        public float patrolSpeed = 3.0f;
        public float aggroSpeed = 5.0f;
        [SerializeField] float aggroDistance = 20f;
        public float acceleration = 2f;
    
        [Header("Pathfinding")]
        public float pathUpdateDelay = 1.0f;
        public List<Vector2> patrolPositions = new List<Vector2>();
        public float nextWaypointDistance = 2;
    
        Animator anim;
        Rigidbody2D rb;
    
        private void Start()
        {
            rb = GetComponent<Rigidbody2D>();
            anim = GetComponent<Animator>();
    
            SetNextState(new AirPatrol());
            nextState.speed = 1; // HERE IS MY PROBLEM >:(
        }
    
        private void Update()
        {
            anim.SetBool("seeking", currentState.GetType() == typeof(AirPatrol));
            float rot = -rb.velocity.x * 3;
        }
    }
    

    敌国级

    public class EnemyState
    {
        public Rigidbody2D rb;
        public Animator anim;
        public Transform transform;
        public EnemyController controller;
    
        public virtual void OnEnter(EnemyController parentController)
        {
            controller = parentController;
            rb = controller.GetComponent<Rigidbody2D>();
            anim = controller.GetComponentInChildren<Animator>();
            transform = controller.transform;
        }
    
        public virtual void OnUpdate()
        {
        }
    
        public virtual void OnFixedUpdate()
        {
        }
    
        public virtual void OnLateUpdate()
        {
        }
    
        public virtual void OnExit()
        {
        }
    }
    

    空中巡逻级

    public class AirPatrol : EnemyState
    {
        public List<Vector2> patrolPositions = new List<Vector2>(); // List of positions to patrol between
        public float speed = 3.0f; // Movement speed
        public float acceleration = 2f; // Acceleration
    
        public float pathUpdateDelay = 1.0f; // How often to update the path
    
        public float nextWaypointDistance = 1.5f; // How far the patroller should check for the next waypoint
    
        int positionIndex; // Index of the target position in patrolPositions
        int currentWaypoint = 0; // Index of the current target waypoint on the current path
    
        float timeSinceUpdatedPath; // Time since last generated path
    
        Path path; // Current path
        public Seeker seeker; // Seeker component for A* pathfinding
    
        public override void OnEnter(EnemyController parentController)
        {
            base.OnEnter(parentController);
    
            positionIndex = 0;
            timeSinceUpdatedPath = 0;
        }
    
        public override void OnUpdate()
        {
            base.OnUpdate();
    
            if (timeSinceUpdatedPath <= 0) // Update path if delayed enough
            {
                UpdatePath();
                timeSinceUpdatedPath = pathUpdateDelay;
            }
            timeSinceUpdatedPath += Time.deltaTime;
    
            if (path == null) { return; }
            if (currentWaypoint >= path.vectorPath.Count) // At end of the path
            {
                positionIndex = positionIndex + 1 >= patrolPositions.Count ? 0 : positionIndex + 1; // Iterate to next patrol point
                UpdatePath();
                return;
            }
    
            MoveAlongPath();
        }
    
        private void MoveAlongPath()
        {
            Vector2 direction = (path.vectorPath[currentWaypoint] - transform.position).normalized;
            rb.velocity = Vector3.Lerp(rb.velocity, direction * speed, acceleration * Time.deltaTime);
    
            float distance = Vector2.Distance(rb.position, path.vectorPath[currentWaypoint]);
            if (distance < nextWaypointDistance)
            {
                currentWaypoint++;
            }
        }
    
        private void UpdatePath()
        {
            if (!seeker.IsDone()) { return; }
            seeker.StartPath(transform.position, patrolPositions[positionIndex], SetPath);
        }
    
        private void SetPath(Path p)
        {
            if (p.error) { return; }
    
            path = p;
            currentWaypoint = 0;
        }
    }
    

    敌方控制者等级

    public class EnemyController : MonoBehaviour
    {
        public EnemyState mainStateType;
        public EnemyState currentState;
        public EnemyState nextState;
    
        private void Update()
        {
            if (nextState != null)
            {
                SetState(nextState);
            }
    
            if (currentState != null) { currentState.OnUpdate(); }
        }
    
        private void LateUpdate()
        {
            if (currentState != null) { currentState.OnLateUpdate(); }
        }
    
        private void FixedUpdate()
        {
            if (currentState != null) { currentState.OnFixedUpdate(); }
        }
    
        private void SetState(EnemyState newState)
        {
            nextState = null;
            if (currentState != null)
            {
                currentState.OnExit();
            }
            currentState = newState;
            currentState.OnEnter(this);
        }
    
        public void SetNextState(EnemyState newState)
        {
            if (newState != null)
            {
                nextState = newState;
            }
        }
    }
    

    任何帮助都将不胜感激!:)

返回
作者最近主题: